from goods.models import GoodsChannel


def get_categories():
    # channels = GoodsChannel.objects.all()
    # 查询所有分类
    # categories = GoodsCategory.objects.all()

    #  1-查询频道并排序
    channels = GoodsChannel.objects.order_by('group_id', 'sequence')
    # 2- 遍历，转换频道结构-字典
    catetories = {}
    for channel in channels:
        # 遍历字典的时候，如果一样会被重新赋值，所以要做判断
        # 判断此频道是否已经存在，如果不存在则新建字典
        if channel.group_id not in catetories:
            catetories[channel.group_id] = {
                'channels': [],  # 一级分类的列表
                'sub_cats': []  # 二级分类的列表
            }
            # 向一级分类中添加数据 根据频道的键得到频道的字典，链接
        channel_dict = catetories[channel.group_id]
        channel_dict['channels'].append({
            # channel当前频道，category的对象name是当前对象的属性的名字
            'name': channel.category.name,
            # 当前频道的路由
            'url': channel.url
        })
            # 1.6向二级分类中添加数据 先拿到一级分类，在取出里面的二级分类
        for cat2 in channel.category.subs.all():
            # 拿到字典，然后取字典里面的键-列表
            channel_dict['sub_cats'].append({
                'name': cat2.name,
                # 1.7添加三级分类
                'sub_cats': cat2.subs.all()
            })
            # 查询到信息和分类，转换成页面需要的格式，然后在页面显示出来
    return catetories

